/**
 * @file link_stack.h
 * @brief 链栈头文件
 * @author Xavier ZXY (zxy_xavier@163.com)
 * @version : 1.0
 * @date 2022-04-24
 * 
 */

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */

typedef int Status; 
typedef int SElemType; /* SElemType类型根据实际情况而定，这里假设为int */

typedef struct StackNode
{
    SElemType data;
    StackNode *next;  
}*LinkStackPtr;

typedef struct
{
    LinkStackPtr top;
    int cnt;
}LinkStack;

//显示元素
Status visit(SElemType c);

//构造一个空栈
Status InitStack(LinkStack *S);

//把S置为空栈
Status ClearStack(LinkStack *S);

//S是否为空栈
Status StackEmpty(LinkStack S);

//S的元素个数，即栈长
int StackLength(LinkStack S);

//返回栈顶元素
Status GetTop(LinkStack S, SElemType *e);

//入栈
Status Push(LinkStack *S, SElemType e);

//出栈
Status Pop(LinkStack *S, SElemType *e);

//遍历栈中所有元素
Status StackTraverse(LinkStack S);